計畫新增兩個Model
第一個Model 儲存變數用
比如 name,age,tel
第二個Model 儲存第一個Model list
並且創造一些方法
讓controller 呼叫
以上都是我的構想
單存存一些變數
class ProductItemtMode: NSObject {
    var foodName: String?
    var cookTime: String?
}
//儲存
var userDefaults = UserDefaults.standard
userDefaults.set("Value", forKey: "Key")
userDefaults.synchronize()
//取值
userDefaults.value(forKey: "Key")
一開始用直接 Array存Model在存進UserDefault
但是直接崩潰 說資料格式不符合
上網查需要轉Data存?
錯誤代碼
2018-10-14 23:09:20.882490+0800 Chuhuo[24106:503054] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'Attempt to insert non-property list object (
    "<Chuhuo.ProductItemtMode: 0x60000292d3e0>",
    "<Chuhuo.ProductItemtMode: 0x60000292d3e0>"
) for key productList'
所以先轉Data 再變存進去
結果成功
封存
let data = NSData(bytes: &productList, length: productList.count) //Array 轉 Data
let encodedObject = NSKeyedArchiver.archivedData(withRootObject: data) 
解開
let object = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data)
就是一開始說得一樣
儲存第一個Model
以及有個func可以 儲存 讀取 資料
class ProductMode: NSObject {
    func appendUserdefultTest(productMode: ProductItemtMode) {
        var userDefaults = UserDefaults.standard
        var productList = [ProductItemtMode]()
        
        if (userDefaults.value(forKey: "productList") == nil){
             
            //存取
            productList.append(productMode)
            let data = NSData(bytes: &productList, length: productList.count)
            let encodedObject = NSKeyedArchiver.archivedData(withRootObject: data)
            userDefaults.set(encodedObject, forKey: "productList")
            userDefaults.synchronize()
    
            
            //取出來
            let decodedObject = userDefaults.data(forKey: "productList") as NSData?
            if let decoded = decodedObject {
                let object = NSKeyedUnarchiver.unarchiveObject(with: decoded as Data)
                let data = object as? NSData
            }
        }  
    }
}
看似完美 轉換成data
print時是跟取出來是一樣的
證明讀與取的功能皆正常發揮
但是!!但是!!但是!!
我怎麼找都不知道怎麼把Data轉成
我一開始宣告的Array
var productList = [ProductItemtMode]() 
真的是對Swift還不熟 沒辦法像OC變來變去
原本的productList可以直接
productList[0].foodName
去呼叫
但現在沒辦法啊啊啊啊啊
卡關了
只好繼續努力找找看了
如果真的找不到
我就要改用Sqlite
如果知道怎麼data轉換成我的var productList = ProductItemtMode
歡迎留言告訴我 謝謝
金魚也學得會的「KD指標」! 什麼是KD黃金交叉、KD死亡交叉 - 2021年